Technote IM_ERRATA 06 | October 1994 |
Topics
Figure 1-1 shows the wrong application icon in the menu bar. The SurfWriter
icon should be in the menu bar labeling the application menu, not the Finder
icon.
The description of installing a persistent VBL task is partly incorrect. The documentation states that "if you want to install a persistent system-based VBL task, you need to load its VBL task record into the system partition." This is incorrect, and it is not what is demonstrated in Listing 4-15. Listing 4-15 shows how to put the VBL task code (or enough of it to fool the Vertical Retrace Manager) into the system partition.
However, Listing 4-15 needs a call to FlushInstructionCache added immediately before the call to VInstall. In addition, it is preferable to code the error-handling part of Listing 4-15 like this:
SysHeapPtr := NewPtrSys(kJMPSize); IF SysHeapPtr = NIL THEN BEGIN InstallPersistentVBL := MemError; Exit(InstallPersistentVBL ); END;
Clarification of GetVBLQHdr
Page 4-28
GetVBLQHdr returns a pointer to the head of the VBL queue. One of the bits of the qFlags field of the VBL queue header indicates whether a VBL task is currently executing. The correct bit is bit 6 of the first byte of the qFlags field, or bit 14 of the entire two-byte field. Versions of A/UX prior to 3.1 incorrectly used bit 6 of the entire two-byte field.
The documentation states "If the current applicaiton is then interrupted by a vertical retrace interrupt, the interrupt priority is set to 1 during the servicing of the interrupt and restored to 0 upon completion." This is not strictly correct. The Vertical Retrace Manager actually restores the interrupt mask to 0 before running VBL tasks. As a result, VBL tasks can be interrupted by future level-1 interrupts, although a VBL task cannot interrupt another VBL task.
On page 6-5, the documentation states "Suppose that your application installs and activates a Time Manager task, which is triggered by level-2 interrupts." Actually, Time Manager interrupts are level-1 interrupts.
Also on page 6-5, there is occasional mention of the status register being restored to 0. In fact, only three bits of the status register (the processor priority level) are restored to 0. All other bits are unchanged.
Listing 8-1 on page 8-8 contains several errors. The constant kFinderSig should be defined to be 'MACS'. In addition, that constant cannot be passed directly to the AECreateDesc function. Instead, you must declare a variable of type OSType and assign kFinderSig to it, as follows:
CONST kFinderSig = 'MACS'; VAR ... signature: OSType BEGIN signature := kFinderSig; myErr := AECreateDesc(typeApplSignature, @signature, ...); ...
The entry interrupt handle should be interrupt handler.
Further Reference:
Main | Page One | What's New | Apple Computer, Inc. | Find It | Contact Us | Help